home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
2109
/
2109.xpi
/
chrome
/
febe.jar
/
content
/
febeVerifyext.js
< prev
next >
Wrap
Text File
|
2009-10-13
|
8KB
|
223 lines
// author: Chuck Baker
// contact: febe@customsoftwareconsult.com
// Version 6.3
febeSetMsgs();
function febeVerifyExtension(){
// Verify all entries in the profile/extensions directory.
// To pass validation, an entry must:
// (1) Be a non-empty directory that is named with a proper GUID - either {xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx}, or a pseudo-email: xxx@something.tld
// (2) Contain a parsable 'install.rdf' file that identifies the add-on as either an extension (type 2) or theme (type 4)
// A 'staged-xpis' directory indicates there are add-ons pending install.
Application.storage.set("fixverifyerrors", false); // Fix verify errors?
febeVerifyExtensions();
if(Application.storage.get("fixverifyerrors", false)){febeVerifyExtensions();} // Run again to fix
return true;
}//function febeVerifyExtension(){
function febeVerifyExtensions(){
window.document.title = febeMsg[237];
Application.storage.set("runningVerifyExtRoutine", true);
var fixIt = Application.storage.get("fixverifyerrors", false);
// Create pointer to profile directory
febeProfDir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
var extDir = febeProfDir.clone();
extDir.append("extensions");
var errCnt = 0;
var extCnt = 0;
var mode = febePrefs.getCharPref("extensions.febe.verifyMode"); // 'strict' or 'lenient'
var entries = extDir.directoryEntries;
while(entries.hasMoreElements()){
var entry = entries.getNext();
entry.QueryInterface(Ci.nsILocalFile);
if(!entry.isDirectory()){
if(fixIt){
if(febeDeleteInvalidExt(entry.path)){
var tmp = "<p><b>"+febeMsg[226]+"</b> "+febeMsg[220].replace("%PATH%",entry.path)+" <b>"+febeMsg[227]+"</b><br></p>";
febeprt(tmp);
continue;
}//if
}//if
var tmp = "<p>***";
tmp += "<b>"+febeMsg[226]+"</b><br>";
tmp += "<b>"+febeMsg[220].replace("%PATH%",entry.path)+"</b><br>";
tmp += "***</p>";
febeprt(tmp,"red",15); // Not a directory
errCnt++;
continue;
}else{
if(entry.leafName == "staged-xpis") { // Pending extension installs
if(fixIt){
if(febeDeleteInvalidExt(entry.path)){
var tmp = "<p><b>"+febeMsg[203]+" "+febeMsg[227]+"</b><br></p>";
febeprt(tmp);
continue;
}//if
}//if
var tmp = "<p>***";
tmp += "<b>"+febeMsg[203]+"***</p></b><br>";
febeprt(tmp,"red",15); // Not a directory
errCnt++;
continue;
}//if
if(!febeIsValidGUID(entry.leafName,mode)){
if(fixIt){
if(febeDeleteInvalidExt(entry.path)){
var tmp = "<p><b>"+febeMsg[239].replace("%GUID%",entry.leafName)+" "+febeMsg[227]+"</b><br></p>";
febeprt(tmp);
continue;
}//if
}//if
var tmp = "<p>***";
tmp += "<b>"+febeMsg[239].replace("%GUID%",entry.leafName)+"***</p></b><br>";
febeprt(tmp,"red",15); // Not a valid GUID
errCnt++;
continue;
}//if
}//if
var GUID = extDir.clone();
GUID.append(entry.leafName);
var entries2 = GUID.directoryEntries;
if(!entries2.hasMoreElements()){
if(!entry.isDirectory()){
if(fixIt){
if(febeDeleteInvalidExt(entry.path)){
var tmp = "<p><b>"+febeMsg[226]+"</b> "+febeMsg[221].replace("%GUID%",GUID.path)+" <b>"+febeMsg[227]+"</b><br></p>";
febeprt(tmp);
continue;
}//if
}//if
var tmp = "<p>***";
tmp += "<b>"+febeMsg[226]+"</b><br>";
tmp += "<b>"+febeMsg[221].replace("%GUID%",GUID.path)+"</b><br>";
tmp += "***</p>";
febeprt(tmp,"red",15); // Directory is empty
errCnt++;
continue;
}//if
}//if
GUID.append("install.rdf");
if(!GUID.exists()){
if(fixIt){
if(febeDeleteInvalidExt(entry.path)){
var tmp = "<p><b>"+febeMsg[226]+"</b> "+febeMsg[222].replace("%ITEM%",GUID.path)+" <b>"+febeMsg[227]+"</b><br></p>";
febeprt(tmp);
continue;
}//if
}//if
var tmp = "<p>***";
tmp += "<b>"+febeMsg[226]+"</b><br>";
tmp += febeMsg[222].replace("%ITEM%",GUID.path)+"<br>";
tmp += "***</p>";
febeprt(tmp,"red",15); // No install.rdf
errCnt++;
continue;
}//if
var thisExt = new febeExtInfo(GUID.parent.leafName);
if(thisExt.isInvalid){
if(fixIt){
if(febeDeleteInvalidExt(entry.path)){
var tmp = "<p><b>"+febeMsg[226]+"</b> "+febeMsg[222].replace("%ITEM%",GUID.path)+" <b>"+febeMsg[227]+"</b><br></p>";
febeprt(tmp);
continue;
}//if
}//if
var tmp = "<p>***";
tmp += "<b>"+febeMsg[226]+"</b><br>";
tmp += febeMsg[305].replace("%GUID%",GUID.parent.leafName)+"<br>";
tmp += "***</p>";
febeprt(tmp,"red",15); // Not in extension manager
errCnt++;
continue;
}//if
var extName = thisExt.name;
var extVer = febeStripSpaces(thisExt.version);
var extIsDisabled = thisExt.isDisabled;
var extIcon = thisExt.iconURL;
if(extIsDisabled){extIcon = "chrome://febe/skin/disabled.png";}
var extHome = thisExt.homepageURL;
var eType = thisExt.type; // 2=Extension, 4=Theme
if(eType != 2 && eType != 4){continue;} // Not an extension or theme ... what is it?
var tmp = "<img src='"+extIcon+"' ";
tmp += "style='border: 0px solid ; width: 16px; height: 16px;'/> ";
tmp += thisExt.guid+" <b>"+extName+"</b>";
if(extIsDisabled) tmp += " <i>(disabled)</i>";
tmp += " - OK";
if(eType == 2){
febeprt(tmp,"blue"); // Extension
}//if
if(eType == 4){
febeprt(tmp,"green"); // Theme
}//if
extCnt++;
}//while
if(errCnt == 0){
var tmp = febeMsg[223].replace("%CNT%",extCnt); // All OK
febeprt(tmp,"purple");
febeAlert(tmp);
}else{
var tmp = "<style>color: red; font-size: 15px;</style>";
tmp += febeMsg[224] + "\n";
tmp += "<style>color: purple; font-size: 15px;</style>"+febeMsg[225];
Application.storage.set("alertsound", "failure");
fixIt = febeConfirm(tmp);
Application.storage.set("fixverifyerrors", fixIt);
}//if
var box = document.getElementById("messages");
box.contentDocument.close();
Application.storage.set("runningVerifyExtRoutine", false);
return true;
}//febeVerifyExtensions()
function febeDeleteInvalidExt(path){
var aFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
if (!aFile) return false;
aFile.initWithPath(path);
try{
aFile.remove(true);
}catch(e){
Application.storage.set("alertsound", "failure");
febeFatal(e,febeMsg[306]+"\n"+path);
return false;
}//try/catch
return true;
}//febeDeleteInvalidExt()
function febeprt(txt,color,size){
// Display content in log window
if(!color) color="black";
if(!size) size = 12;
var box = document.getElementById("messages");
txt = "<span style='font-family: Courier New,Courier,monospace; font-size: "+size+"px; color: "+color+";'>"+txt+"<br></span>"
box.contentDocument.write(txt);
var scrollBox = box.contentWindow.document.body;
scrollBox.scrollTop = scrollBox.scrollHeight - scrollBox.clientHeight
return true;
}//febeprt()
function febeIsValidGUID(guid, mode){
// Validate GUID
var mask = " `!$%^&*()+=?,'\""; // Invalid characters
for (var i = 0; i < guid.length; i++){
var c = guid.charAt(i);
if(mask.indexOf(c) != -1 ){return false;};
}//for
// GUID format: {xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx}
var re = /^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$/
var guidOK = Boolean(guid.match(re));
// Email format (valid) i.e., "something@domain.tld"
var re = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/
var emailOK = Boolean(guid.match(re));
// Email format (malformed) - No TLD
var re = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)$/
var malformedemailOK = Boolean(!guid.match(re));
if(mode == "lenient"){malformedemailOK = true;}
return Boolean(guidOK || emailOK || malformedemailOK);
}//febeIsValidGUID()